import random
from concurrent.futures import ProcessPoolExecutor

import requests
import json

# 深度学习
deep_learning = ['神经网络优化', 'ResNet', '深度学习建模流程', 'Transformer', '基础工程结构', '神经网络优化算法',
                 '动态图', 'MobileNet', '基于生成对抗网络实现图像生成', '使用API接口实现命名实体识别',
                 '深度学习基础应用', '深度学习环境配置', '迁移学习', 'ONNX', 'BP神经网络', 'GoogLeNet',
                 '使用多层感知机实现分类', 'GRU', '基于YOLOV5实现目标检测', '循环神经网络', '基于SSD实现目标检测',
                 '使用单层感知机实现线性分类', 'seq2seq', '模型轻量化', '梯度下降', '单层感知机', '正则化',
                 '基于Transformer实现图像分类', '损失函数', '预训练', '基于循环神经网络实现文本分类']

# 人工智能
artificial_intelligence = ['Numpy']

# 知识图谱
knowledge_graph = ['Overfitting', '经典循环神经网络、Recurrent Neural Network',
                   '使用接口服务实现命名实体识别、基于API接口的命名实体识别，Named Entity Recognition Using API Interface',
                   '长短期记忆神经网络、长短时记忆网络、长短期记忆网络', '卷积网络，CNN,Convolutional Neural Network',
                   '激励函数', '使用YOLOV3实现目标检测', '使用Transformer实现图像分类', '脚手架',
                   '基于API接口的机器翻译、使用接口服务实现机器翻译，Machine Translation Using API Interface',
                   '反向传播神经网络', '多层感知器、MLP', '注意力模型、Attention', '基于API接口实现物体识别',
                   '基于CNN实现图像分类', '深度学习介绍、深度学习导论', '模型压缩与剪裁',
                   '语音识别API服务、语音识别接口API',
                   '基于API接口的情感分析、使用接口服务实现情感分析，Sentiment Analysis Using API Interface',
                   'Underfitting', '神经网络自动参数优化', 'Gradient descent', 'Transfer learning', '单层感知器、SLP',
                   '基于深度学习框架实现张量计算', '使用循环神经网络实现语音合成', 'BP算法', '残差网络',
                   '使用预训练模型进行微调、使用预训练模型进行调用和调试', '代价函数、目标函数、误差函数、评估函数',
                   '使用单层感知器模拟逻辑门电路', '基于VAE实现图像生成', '使用单层感知器实现线性分类',
                   '使用循环神经网络实现机器翻译、基于循环神经网络的机器翻译、Machine Translation Using Recurrent  Neural Networks',
                   '网络优化', '深度学习基础实践', 'Regularization', '使用循环神经网络实现语音识别',
                   '循环网络，时间递归神经网络', '使用多层感知器实现分类', '基于GAN实现图像生成',
                   '深度学习框架构建、深度学习框架安装与配置', 'BP神经网络应用、BP神经网络搭建', 'Pre-training',
                   '门控循环单元、门控循环神经网络', '使用SSD实现目标检测',
                   '使用循环神经网络实现文本分类、基于循环神经网络的文本分类、Text Classification Using Recurrent  Neural Networks',
                   '基于ONNX实现模型转换', '开放神经网络交换格式', '使用YOLOV5实现目标检测', '变形器，变换器，变形金刚',
                   '序列到序列',
                   '使用循环神经网络实现命名实体识别、基于循环神经网络的命名实体识别、Named Entity Recognition Using Recurrent  Neural Networks',
                   '深度神经网络']

# 智能语音
intelligent_voice = ['使用语音预训练模型实现说话人分离', '使用深度学习方法实现端点检测', '拼接式方法',
                     '使用滤波器实现语音增强', '前端文本分析', '使用端到端语音合成技术实现语音合成', '参数式方法',
                     '生成式语音预训练模型', '对抗式语音预训练模型', '使用工具实现语音信号分析',
                     '奈奎斯特（Nyquist）定理', 'N-Gram语言模型', '传统声码器', '语音信号倒谱分析', '语音信号预处理',
                     '使用API接口实现个人特征识别', '智能语音建模方法', '使用API接口实现语音听写', '语音合成接口服务',
                     '端到端语音合成', '智能语音开源工具', '智能语音评价指标', '声音采样', '语音增强',
                     '隐马尔可夫模型HMM', '声音非均匀量化', '语音编码类型', '智能语音应用', 'CTC语音识别框架',
                     '语音信号处理基础实践', '使用工具实现语音降噪', '语音唤醒实践', '语音信号频域分析', '声音接收装置',
                     '使用模块实现语音识别', '语音信号预加重', '语音合成进阶技术', '使用工具实现语音唤醒',
                     '语音信号分析', '使用API接口实现语音转写', '语音识别', '语音信号基础', '使用模型实现声纹识别',
                     '语音的感知机制', '使用框架工具实现语音识别', '声音量化', '语音文件参数', '神经网络声码器',
                     'GMM-HMM框架', '语音编码', 'Conformer语音识别框架', '韵律预测', '文本语法分析', '智能语音建模流程',
                     '文本规范化', '使用API接口实现语音合成', '智能语音发展现状', '预测式语音预训练模型',
                     '语音信号加窗', '听觉特性', '声纹识别实践', '声波特性', '文本转音素', '使用滤波器实现回音消除',
                     '使用API接口实现歌曲识别', '神经网络语音合成声学模型', '使用传统方法实现端点检测', '语音前端处理',
                     '智能语音常用数据库', '语音格式转换', '使用声学模型实现语音合成', '声码器',
                     '使用API接口实现语音评测', '语音合成', '端到端语音合成方法', '传统语音合成方法', '麦克风阵列',
                     '语音信号端点检测', 'RNN-Transducer语音识别框架', '语音识别工具', '高斯混合模型GMM',
                     '传统语音合成声学模型', 'PLP特征提取', '语音编码标准', '使用谱减法实现语音增强',
                     '使用模块实现说话人识别', 'LAS语音识别框架', '语音信号共振峰分析', '智能语音发展历史',
                     '语音识别模块', '声音克隆实践', '语音信号时域分析', 'DNN-GMM框架', '语音文件格式', '语音信号分帧',
                     '使用声码器实现语音合成', '智能语音概述', 'FBank特征提取', '使用语音预训练模型实现语音识别',
                     'MFCC特征提取', '语音识别声学模型', '语音合成进阶', '语音预训练模型实践', '麦克风性能指标',
                     '语音预训练模型', '使用工具实现声音克隆', '语音评测实践', '语音的产生机制', '语音特征提取',
                     '语言模型', '语音识别接口服务', '文本结构分析', '语音合成声学模型', '端到端语音识别',
                     '语谱图特征提取', '使用深度学习方法实现语音增强', '使用模块实现文本分析', '声音均匀量化',
                     '使用语音预训练模型实现语音转换']

# 自然语言处理
natural_language_processing = ['深度学习与信息抽取', '使用统计语言模型实现词性标注', '机器翻译', '决策树语言模型',
                               '基于深度学习的语义角色标注', '使用预训练模型实现文本分类', '修辞结构理论',
                               '使用API接口实现机器翻译', '使用循环神经网络实现情感分析', 'N-Gram语言模型',
                               '文本语料处理流程', '感知机与中文分词']

# 计算机视觉
computer_vision = ['目标检测理论介绍\n目标检测理论基础', '现代图像分割算法', '数字图像处理基本理论',
                   '图像生成理论介绍\n图像生成理论基础', '形态学计算、形态学变换',
                   '使用OpenCV实现形态学计算、使用OpenCV实现形态学变换\n', '图像去噪理论基础\n图像去噪理论介绍',
                   '图片分类、图片识别', '计算机视觉常用框架', '行为识别理论介绍\n行为识别理论基础',
                   '计算机视觉介绍、计算机视觉概论', '图像超分辨应用', '目标跟踪经典算法', 'Flow ',
                   '使用Faster-RCNN实现目标检测', '行为识别经典算法', '图像分类理论基础', '使用流模型实现图像生成',
                   '基于API接口实现场景识别', '图像滤波', '使用传统算法实现图像去噪', '使用OpenCV实现边缘检测',
                   '关键点检测技术应用', 'VAE', '关键点检测经典算法', '使用SSD实现目标检测', 'OpenCV实现图像运算',
                   '使用扩散模型实现图像生成', '关键点检测理论基础\n关键点检测理论介绍', '使用循环神经网络实现图像生成',
                   '使用深度学习技术实现图像分割', 'GAN', '使用OpenCV实现图像的多尺度分解', '图像拼接算法应用',
                   '基于深度学习的图像去噪模型', '使用YOLOV3实现目标检测', 'ViT', '使用得分匹配模型实现图像生成',
                   '使用OpenCV实现颜色空间的色彩迁移', '现代图像超分辨算法', '数字图像处理技术实践',
                   '基于CNN实现图像分类', '使用YOLOV7实现目标检测', '基于VAE实现图像生成', '图像的基本要素',
                   '使用SVM算法实现目标识别', '使用深度学习技术实现目标识别', '图像生成技术应用',
                   '基于API接口实现文字识别', '基于API接口实现人脸识别', '物体检测',
                   '使用Vison Transformer实现目标检测', '基于GAN实现图像生成', '使用传统算法实现图像分割',
                   '图像检索理论介绍\n图像检索理论基础', '使用OpenCV实现直方图匹配', '使用Transformer实现图像分类',
                   '图像检索经典算法', '使用OpenCV实现图像的域变换以及滤波操作', '图像检索应用',
                   '使用传统目标检测算法实现目标检测', '目标跟踪技术实践', '目标识别理论基础\n目标识别理论介绍',
                   'OpenCV工具', '使用Fast-RCNN实现目标检测', 'Diffusion', '图像拼接理论介绍\n图像拼接理论基础',
                   '传统图像超分辨模型应用', '图像分割理论介绍\n图像分割理论基础', '使用深度学习技术实现图像去噪',
                   '图像的像素级运算', '基于API接口实现物体识别', '图像拼接算法', '使用FCOS实现目标检测',
                   '传统图像去噪模型', '使用YOLOV5实现目标检测', '使用OpenCV实现图像平滑',
                   '图像超分辨理论基础\n图像超分辨理论介绍', '目标跟踪理论介绍', '目标跟踪理论基础',
                   '使用OpenCV实现阈值分割']

extern = ['Numpy', '计算机视觉技术应用']
# 目标URL
url = "http://127.0.0.1:5050/buildQuestion"

total_list = deep_learning + artificial_intelligence + knowledge_graph + intelligent_voice + natural_language_processing + computer_vision

all_data = []


# 发送请求
def send_request(data, knowledge, type):
    Body = {
        "Body": data
    }
    # 发送POST请求
    response = requests.post(url, json=Body)
    response_json = response.json()
    if response_json['success']:
        response_json['data'][0]['knowledge'] = knowledge
        all_data.extend(response_json['data'])

        # 将所有数据保存为 JSON 文件
        with open(f'questions_{type}.json', 'w', encoding='utf-8') as f:
            json.dump(all_data, f, ensure_ascii=False, indent=4)


# for i in extern:
#     question_type_list = [1]
#     grade_list = [0, 1, 2]
#     data = {
#         "model_name": "tongyi",
#         "question_type": random.choice(question_type_list),
#         "mode": 3,
#         "knowledge": [
#             i
#         ],
#         "template": "",
#         "question_num": 1,
#         "grade": random.choice(grade_list),
#         "text": ""
#     }
#     send_request(data, i)

def generate_question(knowledge_list: list, name: str):
    for i in knowledge_list:
        question_type_list = [1]
        grade_list = [0, 1, 2]
        data = {
            "model_name": "tongyi",
            "question_type": random.choice(question_type_list),
            "mode": 3,
            "knowledge": [
                i
            ],
            "template": "",
            "question_num": 1,
            "grade": random.choice(grade_list),
            "text": ""
        }
        send_request(data, i, name)


if __name__ == '__main__':
    pool = ProcessPoolExecutor(4)
    pool.submit(generate_question, deep_learning, "deep_learning")
    pool.submit(generate_question, knowledge_graph, "knowledge_graph")
    pool.submit(generate_question, intelligent_voice, "intelligent_voice")
    pool.submit(generate_question, computer_vision, "computer_vision")
    pool.shutdown(wait=True)
